package shujia.day11;

import java.util.HashSet;

//需求：当学生的姓名和年龄一样的时候，表示重复对象
public class SetDemo2 {
    public static void main(String[] args) {
        HashSet<Student> set1 = new HashSet<>();

        Student s1 = new Student("张成阳", 18);
        Student s2 = new Student("方直", 18);
        Student s3 = new Student("张成阳", 18);
        Student s4 = new Student("黄沪生", 17);
        Student s5 = new Student("黄涛", 19);
        /*
            1、HashSet中add方法底层实际上是调用了HashMap中的put方法
            2、底层依赖于元素对象的类型中的hashCode()方法，但是我们Student类中并没有写，所以用的是Object类中的方法，
                而父亲Object类中的hashCode()是根据对象的地址值计算出一个哈希值。说明这5个对象hashCode的结果都不一样
            3、底层判断待插入的元素是否与已经在hashtable中的元素重复，是根据两个条件判断的
                1）哈希值hashCode()结果是否一样
                2）元素的equals方法结果是否一样
                我们的Student元素类中这两个方法都没有进行重写，所以任意两个Student对象的结果都不一样
                既然不一样，底层就认为不重复，不重复就添加到集合中，所以我们看到的结果是没有去重的
         */
        set1.add(s1);
        set1.add(s2);
        set1.add(s3);
        set1.add(s4);
        set1.add(s5);

        for (Student student : set1) {
            System.out.println(student);
        }

    }
}
